跳到主要内容

GitLab Runner 配置学习

CI 的 官方文档

示例文件

创建一个 .gitlab-ci.yml

stages:
- run_test

push_test:
stage: run_test
script:
- buildctl
--addr tcp://host.docker.internal:1234 build
--frontend dockerfile.v0
--local context=.
--local dockerfile=.
--opt network=bridge
--output type=image,name=alsritter.icu/testdocker:f-test01,push=false
tags:
- test

CI 里面运行其它容器

尝试在 CI 里面构建服务并连接数据库

stages:
- run_test

push_test:
image: golang:1.13.15-alpine3.12
stage: run_test
script:
- go run -mod=vendor .
services:
- name: mysql:5.6.51
alias: mysql

- name: redis:latest
alias: redis

variables:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: testapp

测试程序

package main

import (
"fmt"
"log"
"net"

"gorm.io/driver/mysql"
"gorm.io/gorm"
)

var db *gorm.DB

type Auth struct {
Username string
Password string
}

func init() {
var err error
dsn := "root:123456@tcp(127.0.0.1:3306)/testapp?charset=utf8mb4&parseTime=True&loc=Local"
db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
fmt.Printf("连接错误: %v\n", err)
}
db.DB()
}

func main() {
fmt.Println("IPv4: ", GetOutboundIP())

// 创建表或自动迁移(把结构体和数据表进行对应)
err := db.AutoMigrate(&Auth{})
if err != nil {
panic(err)
}

au1 := &Auth{}
au1.Username = "李四"
au1.Password = "123456"
db.Create(au1)

var au2 Auth
db.First(&au2)
log.Printf("%v \n", au2)
}

// Get preferred outbound ip of this machine
func GetOutboundIP() net.IP {
conn, err := net.Dial("udp", "8.8.8.8:80")
if err != nil {
log.Fatal(err)
}
defer conn.Close()

localAddr := conn.LocalAddr().(*net.UDPAddr)

return localAddr.IP
}

暴露端口

services:
- name: wiremock/wiremock:main-alpine
alias: mock-server1
command: [ "--port","9010","--https-port","9040","--verbose"]
- name: wiremock/wiremock:main-alpine
alias: mock-server2
command: [ "--port","9020","--https-port","9050","--verbose"]
- name: wiremock/wiremock:main-alpine
alias: mock-server3
command: [ "--port","9030","--https-port","9060","--verbose"]

References